package com.哈希表;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 假设Andy和Doris想在晚餐时选择一家餐厅，并且他们都有一个表示最喜爱餐厅的列表，每个餐厅的名字用字符串表示。
 *
 * 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个，则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。
 *
 */
public class 两个列表的最小索引总和 {
    static class Solution {
        /**
         * 1.利用 map 找到交集，将交集加入到map2中
         * 2.将map2转成List 关排序
         * 3.排序后逻辑，可能存在多个相同的下标和，只需要将首个下标和与后面的下标和进行比较，如果相同就加入到集合，如果 不同就跳出循环。
         * 4。将下标的集合转成 数组；
         * @param list1
         * @param list2
         * @return
         */
        public String[] findRestaurant(String[] list1, String[] list2) {
            Map<String, Integer> map = new HashMap<>();
            Map<String, Integer> map2 = new HashMap<>();
            for (int i = 0; i < list1.length; i++) {
                map.put(list1[i], i);
            }
            for (int i = 0; i < list2.length; i++) {
                if (map.containsKey(list2[i])) {
                    map2.put(list2[i], i + map.get(list2[i]));
                }
            }
            List<Map.Entry<String,Integer>> mapList = new ArrayList<>(map2.entrySet());
            //排序
            Collections.sort(mapList, new Comparator<Map.Entry<String, Integer>>() {
                @Override
                public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                    return o1.getValue().compareTo(o2.getValue());
                }
            });
            int i = 0;
            int sum = 0;
            List<String> str = new ArrayList<>();
          add:  for(Map.Entry<String,Integer> entry:mapList){
                switch (i){
                    case 1:
                        if(entry.getValue() == sum){
                            str.add(entry.getKey());
                            break;
                        }
                        else {
                            break add;
                        }
                        default:
                            str.add(entry.getKey());
                            sum = entry.getValue();
                            i++;
                }

            }


            return str.toArray(new String[str.size()]);

        }

        public static void main(String[] args) {
            Solution solution = new Solution();
            solution.findRestaurant(new String[]{"Shogun","Tapioca Express","Burger King","KFC"}, new String[]{"KFC","Shogun","Burger King"});
        }

    }
}
